package com.teen9g.infoplatformserver.controller;

import com.teen9g.dto.ChatMessageDTO;
import com.teen9g.entity.ChatMessage;
import com.teen9g.infoplatformserver.service.ChatService;
import com.teen9g.result.Result;
import com.teen9g.vo.ChatMessageSideVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/chat")
public class ChatController {

    @Autowired
    private ChatService chatService;

    /**
     * 发送消息
     *
     * @param chatMessageDTO 消息DTO
     * @return 操作结果
     */
    @PostMapping("/send")
    public Result<String> sendMessage(@RequestBody ChatMessageDTO chatMessageDTO) {
        log.info("发送消息:{}", chatMessageDTO);
        String result = chatService.sendMessage(chatMessageDTO);
        return Result.success(result);
    }

    /**
     * 获取用户之间的聊天历史记录
     *
     * @param userId1 用户ID1
     * @param userId2 用户ID2
     * @return 聊天历史记录列表
     */
    @GetMapping("/history/{userId1}/{userId2}")
    public Result<List<ChatMessage>> getChatHistory(@PathVariable Integer userId1, @PathVariable Integer userId2) {
        log.info("获取用户{}和用户{}的聊天历史记录", userId1, userId2);
        List<ChatMessage> list = chatService.getChatHistory(userId1, userId2);
        return Result.success(list);
    }

    /**
     * 根据chatId获取聊天历史记录
     *
     * @param chatId 聊天ID
     * @return 聊天历史记录列表
     */
    @GetMapping("/history/chatId")
    public Result<List<ChatMessage>> getChatHistoryByChatId(@RequestParam String chatId) {
        log.info("获取chatId为{}的聊天历史记录", chatId);
        List<ChatMessage> list = chatService.getChatHistoryByChatId(chatId);
        return Result.success(list);
    }

    /**
     * 获取用户和AI之间的聊天历史记录
     *
     * @param chatId 聊天ID
     * @return 聊天历史记录列表
     */
    @GetMapping("/history/AI/{chatId}")
    public Result<List<ChatMessage>> getChatHistoryByAi(@PathVariable String chatId) {
        log.info("获取chatId为{}的和AI之间的聊天历史记录", chatId);
        List<ChatMessage> list = chatService.getAIChatHistoryByChatId(chatId);
        return Result.success(list);
    }

    /**
     * 获取用户的聊天历史记录列表（左侧列表）
     *
     * @param userId 用户ID
     * @return 聊天历史记录列表
     */
    @GetMapping("/historyList/{userId}")
    public Result<List<ChatMessageSideVO>> getChatHistoryList(@PathVariable Integer userId) {
        log.info("获取用户{}的聊天历史记录列表（左侧列表）", userId);
        List<ChatMessageSideVO> list = chatService.getChatHistoryList(userId);
        return Result.success(list);
    }

    /**
     * 根据搜索条件获取用户的聊天历史记录列表（左侧列表）
     * 用于左侧列表的搜索功能
     *
     * @param content 搜索内容
     * @return 聊天历史记录列表
     */
    @GetMapping("/historyList/search/{userId}")
    public Result<List<ChatMessageSideVO>> getChatHistoryListBySearch(
            @PathVariable Integer userId, @RequestParam String content) {
        log.info("根据搜索条件:{}获取用户的聊天历史记录列表（左侧列表）", content);
        List<ChatMessageSideVO> list = chatService.getChatHistoryListBySearch(userId, content);
        return Result.success(list);
    }

    /**
     * 删除用户之间的聊天记录 userId1单方面删除userId2的聊天记录
     *
     * @param userId1 用户ID1
     * @param userId2 用户ID2
     * @return 操作结果
     */
    @DeleteMapping("/delete/by/{userId1}/with/{userId2}")
    public Result<String> deleteChat(@PathVariable Integer userId1, @PathVariable Integer userId2) {
        log.info("{}单方面删除用户{}和用户{}的聊天记录", userId1, userId1, userId2);
        String result = chatService.deleteChat(userId1, userId2);
        return Result.success(result);
    }

    /**
     * 获取用户的所有chatId
     *
     * @param userId 用户ID
     * @return chatId列表
     */
    @GetMapping("/getChatIds/{userId}")
    public Result<List<String>> getChatIds(@PathVariable Integer userId) {
        log.info("获取用户{}的所有chatId", userId);
        List<String> chatIds = chatService.getChatIds(userId);
        return Result.success(chatIds);
    }

    /**
     * 更新消息已读状态
     *
     * @param messageIds 消息ID列表
     * @return 操作结果
     */
    @PutMapping("/updateReadStatus")
    public Result<String> updateReadStatus(@RequestBody List<Integer> messageIds) {
        log.info("更新消息已读状态:{}", messageIds);
        String result = chatService.updateReadStatus(messageIds);
        return Result.success(result);
    }
}
